#ifndef __dlm_h__
#define __dlm_h__

typedef void* 	DYNMOD_HND;
typedef void* 	FUNC_ENTRY;

typedef struct __dynamic_module_function
{
	int 		idx;		//函数全局编号
	char 		name[64];  	//函数符号名称
	FUNC_ENTRY 	entry;		//函数入口地址

	DYNMOD_HND 	mod_hnd;		//所在module句柄
	int 		mod_idx;		//module全局编号
	char 		mod_name[32]; 	//module名称

}DYNFUNC;

typedef struct __dynamic_module
{
	char 	name[32];	//module名称
	int 	idx;		//module全局编号
	int 	fx_idx_start;	//module函数全局起始编号
	int 	fx_idx_end;		//module函数全局结束编号
}DYNMOD;

typedef struct  __dynamic_function_pool
{
 	int nfx;		//节点数量
 	int nmod;		//模块数量
 	struct __dynamic_module* mod;	//动态模块阵列
 	struct __dynamic_module* _mod;	//待插入module节点地址
	struct __dynamic_module_function* fx;	//函数阵列
	struct __dynamic_module_function* _fx;	//待插入function节点地址
}DYNFUNCPOOL;

void fx_pool_construct(struct  __dynamic_function_pool* FxPool);
void fx_pool_release(struct  __dynamic_function_pool* FxPool);
void fx_pool_list(struct  __dynamic_function_pool* FxPool);
void load_dynamic_module(char* dynlib_name, struct  __dynamic_function_pool* FxPool);

FUNC_ENTRY fx_get_entry(char* dynlib_name, char* func_name, 
						struct  __dynamic_function_pool* FxPool);

int fx_get_idx(char* dynlib_name, char* func_name, 
			   struct  __dynamic_function_pool* FxPool);

void FX_TRIGGER(char* json_cb, char* json_retval, struct  __dynamic_function_pool* FxPool);

#endif
